package day18_Reflection.demo04_var;

import java.lang.reflect.Field;

//反射获取成员变量方法
/*
Class类中用与获取成员变量的方法
Field[] getFields();获取所有公共成员变量的数组
Field[] getDeclaredFields();获取所有成员变量的数组
Field[] getField(String name);返回单个公共成员变量的对象
Field[] getDeclaredField(String name);返回单个成员变量的对象

Class类中用与成员变量赋值的方法
void set(Object obj,Object value):给obj对象的成员赋值value
注意:通过反射私有化成员不能直接赋值需要通过setAccessible方法
 */
public class Test {
    public static void main(String[] args) throws Exception{
        Class<User> userClass = User.class;
        //获取所有公共成员变量的数组  Field[] getFields();
        Field[] fields = userClass.getFields();
        for (Field field : fields) {
            System.out.println(field);
        }
        System.out.println("--------");
        //获取所有成员变量的数组  Field[] getDeclaredFields();
        Field[] declaredFields = userClass.getDeclaredFields();
        for (Field declaredField : declaredFields) {
            System.out.println(declaredField);
        }

        System.out.println("--------");
        //返回单个公共成员变量的对象  Field[] getField(String name);
        Field age = userClass.getField("age");
        System.out.println(age);
        System.out.println("--------");
        //返回单个成员变量的对象  Field[] getDeclaredFields(String name);
        Field num = userClass.getDeclaredField("num");
        System.out.println(num);
    }
}
